Optimistic data fetching and rendering

ABSTRACT

Embodiments are disclosed for fast data fetching and rendering. In some embodiments, in response to receiving a page display request, a system constructs a static, possibly nested query for retrieving all the data to be rendered for the page and stores the query result in a data store. For a future page display request, the system similarly constructs a query and determines whether the query can be resolved from the data store. If not, the system constructs a “diff query” to fetch only the missing data. In some embodiments, in response to a subsequent page update request, the system retrieves from the server all the data likely to be viewed or updated and renders the data changes corresponding to the requested update. The system then submits the data changes to the server and undoes the rendering of the data changes when the server fails to process the data changes.

CROSS-REFERENCES TO RELATED APPLICATIONS

This application claims the benefit of commonly assigned U.S.Provisional Patent Application Ser. No. 62/273,341, filed on Dec. 30,2015, and entitled “OPTIMISTIC DATA FETCHING AND RENDERING,” thedisclosure of which is hereby incorporated herein in its entirety byreference.

TECHNICAL FIELD

This patent application generally relates to data fetching andrendering, and more specifically, to fetching sufficient data to reducenetwork bandwidth usage (e.g., by reducing network traffic) andrendering data in real time to enhance customer satisfaction.

BACKGROUND

Social networking systems commonly provide mechanisms that allow usersto interact and communicate within their social networks. For example, auser may be able to send a content item to one or more other users.Content items may be uploaded to or created within many socialnetworking system contexts, such as newsfeeds, user profiles, userwalls, group pages, event pages, private messages, email messages,comment threads, message chains, photo albums, or any other socialnetworking system context capable of displaying a content item.

The social networking systems typically comprise a combination of thisuser-generated content as well as user interface content of the socialnetworking system. These contents are collectively referred to herein as“data.” The data can include other information that is stored and thentransformed into data that becomes visible (e.g., content).

Application developers commonly use graphical user interfaces (GUIs)provided by computing electronic devices to display data on client(“mobile”) computing devices. Mobile computing devices can be handheldcomputing devices, e.g., “smartphones,” tablet computing devices, andthe like. The data can be fetched via a data communications network fromremote server computing devices. In a social networking environment, forexample, people rely heavily on the display of web contents throughGUIs. The processing power of the remote server, the load of thenetworks, the complexity of the GUIs, and other factors can allcontribute to potential deterioration of the GUI quality. It would behelpful to overcome such potential issues and maintain or improve GUIperformance.

BRIEF DESCRIPTION OF THE DRAWINGS

The embodiments introduced here may be better understood by referring tothe following Detailed Description in conjunction with the accompanyingdrawings, in which like reference numerals indicate identical orfunctionally similar elements:

FIG. 1 illustrates a sample environment in which a data managementsystem disclosed in the present application can operate.

FIG. 2 illustrates example modules of a server disclosed in the presentapplication.

FIG. 3 illustrates an example component for rendering a news feed.

FIG. 4 illustrates an example component for fetching a news feed.

FIG. 5 illustrates an example component for fetching a story.

FIG. 6A illustrates an example component for fetching a news feedsimilar to the one illustrated in FIG. 4.

FIG. 6B illustrates an example component for fetching a feedback.

FIG. 7 illustrates example modules of a client controller disclosed inthe present application.

FIG. 8 illustrates an example data structure that records the queryhistory.

FIG. 9 illustrates an example data structure storing data changesresulting from user input before that are committed into databases.

FIG. 10 illustrates a process performed by the client controller ofprocessing a user request for display a page.

FIG. 11 illustrates a process performed by the client controller ofhandling a user request for updating a page.

FIG. 12 illustrates a process performed by the client controller ofmanaging data in response to user input.

FIG. 13 illustrates a process performed by the client controller ofhandling results of processing data changes by the server.

FIG. 14 is a block diagram illustrating example modules of a computersystem that may be used to implement various features of theembodiments.

The headings provided herein are for convenience only and do notnecessarily affect the scope or meaning of the claimed embodiments.Further, the drawings have not necessarily been drawn to scale. Forexample, the dimensions of some of the elements in the figures may beexpanded or reduced to help improve the understanding of theembodiments. Similarly, some components and/or operations may beseparated into different blocks or combined into a single block for thepurposes of discussion of some of the embodiments. Moreover, while thevarious embodiments are amenable to various modifications andalternative forms, specific embodiments have been shown by way ofexample in the drawings and are described in detail below. Theintention, however, is not to limit the particular embodimentsdescribed. On the contrary, the embodiments are intended to cover allmodifications, equivalents, and alternatives falling within the scope ofthe disclosed embodiments as defined by the appended claims.

DETAILED DESCRIPTION

Embodiments are described of an optimistic fetching and rendering systemfor fast data fetching and rendering. In some embodiments, in responseto receiving a page display request, a system constructs a static,possibly nested query for retrieving all the data to be rendered for thepage and stores the query result in a data store. Rendering involvestranslating data to a visual representation, e.g., on a display deviceof a computing device. For a future page display request, the systemsimilarly constructs a query and determines whether the query can beresolved from the data store. If not, the system constructs a “diffquery” to fetch only the missing data. A diff query can request datathat has changed since results were returned for a prior query. In someembodiments, in response to a subsequent page update request, the systemretrieves from the server all the data likely to be viewed or updatedand renders the data changes corresponding to the requested update. Thesystem then submits the data changes to the server and undoes therendering of the data changes when the server fails to process the datachanges.

FIG. 1 illustrates a sample environment in which a data managementsystem disclosed in the present application can operate. In someembodiments, the client controller 104 manages different types ofoperations for a user. The client controller 104 typically runs (e.g.,executes) on a client device, such as a desktop computer, a laptopcomputer, a tablet, a cellphone, a wearable device, etc. The server 102supplies control algorithms and data to the client controller 104. Theserver 102 typically runs on an enterprise system that has sufficientcomputing and storage capabilities for managing the component database106 and handling a number of database queries from the client controller104.

In some embodiments, the component database 106 stores differentcomponents that describe the control logic for graphical user interface(GUI) rendering, data fetching, and other types of operations performedby the client controller 104. In particular, some of the componentscover the submission of database queries to the server 102. Thecomponent database 106 can reside on the enterprise system or somewhereelse accessible to the server 102. A component cache storing componentsreceived by the client controller 104 from the server 102 in response torendering requests can reside on the client device or somewhere elseaccessible to the client controller 104. The master repository 110stores all data managed by the data management system. The masterrepository 110 can reside on the enterprise system or somewhere elseaccessible to the server 102. The data store 108 stores data received bythe client controller 104 from the server 102 in response to databasequeries. The data store 108 can reside on client device or somewhereelse accessible to the client controller 104. The server 102, the clientcontroller 104, the component database 106, and the data store 108 areinterconnected via any type of network known to someone in the ordinaryskill in the art, such as a cellular network or the Internet.

In some embodiments, initially, the client controller 104 receives arequest from a user for a page. The client controller 104 fetches allthe necessary data before rendering the page. Specifically, the clientcontroller 104 receives appropriate components from the server 102 thatdefine appropriate database queries for data necessary for rendering therequested page, organizes the set of appropriate database queries, andsubmits the organized set of database queries back to the server 102 atonce. The organization can involve determining whether the set ofappropriate database queries can be resolved from the data store 108.Upon a negative determination, the client controller 104 replaces theset of appropriate database queries by a subset for only data that arenot already present in the data store 108. Next, the client controller104 receives the query results from the server 102 and saves the queryresults in the data store 108. The client controller 104 then rendersthe page using the data available in the data store 108.

In some embodiments, the client controller 104 receives a request from auser to update the page. The client controller 104 displays therequested change and related changes to the user before submitting allthe changes to the server 102 for updating the master repository 110.Specifically, the client controller 104 identifies the related changes,keeps track of all the changes in a queue or any appropriate datastructure, and determines whether to commit the changes in the datastore 108 depending on whether the update of the master repository 110is successful. If the update succeeds, the client controller 104 storesthe changes in the data store 108. If the update fails, the clientcontroller 104 shows an error message to the user and withdraws therequested change from the display. The client controller 104 can alsoresubmit the changes to the server 102.

FIG. 2 illustrates example modules of a server disclosed in the presentapplication. In some embodiments, the server comprises a componentmanager 202 and a query processor 204. The component manager 202 managesthe organization and recordation of components in the componentdatabase. The query processor 204 executes the database queriessubmitted by the client controller and returns the query results to theclient controller.

In some embodiments, the component manager 202 requires that controllogic for different types of operations be captured in separatecomponents. For example, the control logic for rendering a news feed andthe control logic for fetching the news feed before rendering are to becaptured in two separate components. This requirement enables one typeof operation to be performed without affecting the another type ofoperation. The component manager 202 further requires that thecomponents related to the same type of data be recorded in the samefile. For example, the component describing the control logic forrendering a news feed and the component describing the control logic forfetching the news feed before rendering are to be recorded in the samefile. This requirement enables efficient verification of consistency andaccuracy across different types of operations performed on the same typeof data. In addition, the component manager 202 enables the compositionof components and thus the establishment of a hierarchy of components.

In some embodiments, the component manager 202 requires the definitionof components that fetch a set of related items through a “group query”.The set of items are related in the sense that when one of them isviewed or updated, any other item in the set is likely to be viewed orupdated. For example, one such set of related items can include aprofile of a first user, data related to viewing of the profile, datarelated to liking of the profile, data related to comments on theprofile, and data related to a second user taking an action on the firstuser's profile. The group query helps reduce the number ofcommunications with the server by returning the set of related items atonce to a client, as further discussed below.

In some embodiments, the component manager 202 requires that the controllogic for rendering a specific type of data includes an indication ofcausal relationships where a change of this type of data causes a chanceof another type of data. For example, in response to the second userLiking the first user's profile, a list of users who like the firstuser's profile and a count of the total number of Likes for the firstuser's profile would need to be updated. The detection of casualrelationships facilitates the propagation of data changes and helpsensure the consistency in the rendering of different pages, as furtherdiscussed below. Information regarding causal relationships can also beincorporated into those components that describe the control logic forfetching data (and eventually passed onto the components that describethe control logic for rendering data) or stored separately from thecomponents.

FIG. 3 illustrates an example component for rendering a news feed. Thisfirst component contains a “render” function 302 for the rendering. Thefirst component includes a property of a “viewer” 304, which includes alist of “stories” 306.

FIG. 4 illustrates an example component for fetching a news feed. Thissecond component, which is separate from but is recorded in the samefile as the first component for rendering the news feed, includes a“query” 402 for what is inside the “viewer” 404 for the news feed,including the list of “stories” 406. The second component generallydefines a static database query, but it allows flexibility with theincorporation of parameters. While the database query requests aspecific set of fields, such as the list of stories, it requests avariable number of instances or a partial value through a parameter“count” 408, such as the number of stories. The second component alsoinvokes another component “story” 410, forming a compositionrelationship, to further lay out the database query for each of thenumber of stories.

FIG. 5 illustrates an example component for fetching a story. This thirdcomponent includes a “query” 502 for what is inside a “story” 504,including an author of the story 506 and the text 508 of the story. Thesecond component can form a composition relationship with this thirdcomponent.

FIG. 6A illustrates an example component for fetching a news feedsimilar to the one illustrated in FIG. 4. The database query defined inthis fourth component similarly contains several parameters, including aparameter “count” 602. FIG. 6B, to be contrasted with FIG. 6A,illustrates an example component for fetching a feedback. This fifthcomponent allows additional flexibility to a static database query byrequesting a variable number of fields. Specifically, whether thedatabase query requests the last field of a list of “comments” 604depends on whether the value of a parameter “showComments” 606corresponding to a checkbox is true.

FIG. 7 illustrates example modules of a client controller disclosed inthe present application. In some embodiments, the client controllercomprises a user interface 702, a query generator 704, and a mutationhandler 706. The user interface 702 accepts requests for pages from auser, outputs page renderings to a user, and accepts input into the pagerenderings from the user. The query generator 704, in response to userrequests to display or update pages, generates database queries to fetchdata necessary for rendering the requested items from the server. Themutation handler 706 handles data changes in response to user input intorendered pages.

In some embodiments, the user interface 702 initially receives a userrequest for a page. When the page is a webpage, the request can be inthe form of a URL. The user interface 702 passes the request to thequery generator 704 to fetch the data necessary for rendering the pagefrom the server.

In some embodiments, the query generator 704 converts the user requestto a top-level database query. When the page is a webpage, the querygenerator 704 can analyze the URL to identify the top-level databasequery. For example, when the URL matches the word “profile”, the querygenerator 704 determines that the requested page shows a user profile,which can contain a photo and some demographic information, andidentifies the top-level database query that corresponds to thestructure of a user profile. Similarly, when the requested page shows anews feed, which can contain a list of stories, the query generator 704identifies the top-level database query that corresponds to thestructure of a news feed.

In some embodiments, the query generator 704 then expands the top-leveldatabase query based on the composition relationships to collect anentire hierarchy of database queries for fetching all the data necessaryfor rendering the requested page. For example, in reference to FIG. 4discussed previously, the query generator 704 starts with the top-leveldatabase query for a viewer associated with a specific news feed,proceeds to identify the query for a list of stories, and proceedsfurther to identify the query for each of the stories. The querygenerator 702 can traverse the hierarchy in a breadth-first manner or adepth-first manner.

In some embodiments, the query generator 704 reorganizes the collectedset of database queries before contacting the server for queryexecution. The query generator 704 examines the set of database queriesand eliminates duplicate ones. For example, when the requested pagecontains multiple references to the same user, the query generator 704needs to include only one database query for data related to that user.In addition, the query generator 704 reviews query history andeliminates certain database queries according to the query history, suchas database queries that were recently executed by or submitted to theserver. The results of these database queries can already be availablelocally.

FIG. 8 illustrates an example data structure that records the queryhistory. In some embodiments, the query generator 704 can maintain aquery history table in the data store to record each database query andcorresponding values of required parameters submitted to the server. Thequery history table can contain a date column 802 indicating when thedatabase query was submitted to the server or when the database queryresult was received from the server, a query column 804 identifying thequery, a requested fields column 808 indicating the requested fields,and a required parameters column 806 indicating values of the requiredparameters. Generally, the query column 804 refers to an item, which canbe displayed in the GUI, the requested fields column 808 refers tocertain properties of that item, and the required parameters column 806contains values for identifying the item. For example, according to therecord 810, a query was submitted for the text of the story written byJohn Doe on May 8, 2000; according to the record 812, a query wassubmitted for the genre and length of the story written by Jane Doe onMay 9, 2011; according to the record 814, a query was submitted for thestories of the news feed from the “Business” section of a TelevisionNews Channel.

In some embodiments, as further discussed below, the query generator 704stores query results in the data store. In general, the query generator704 adds an entry to the query history table for a database query beforeor after the database query is submitted to the server for execution orbefore or after the result is saved in the data store. The querygenerator 704 then removes an entry when the query cannot be executedsuccessfully or when certain data retention rules are met. As such, thequery history table can also include a link in each entry to thecorresponding database query result in the data store. When a databasequery leads to a hierarchy of database queries, an entry is added to thequery history table for each of the individual queries, which can thenbe referenced from the query history table separately.

In some embodiments, based on the query history table, the querygenerator 704 determines whether the result of executing any databasequery included in the collected set of database queries is or will soonbe available in the data store. Upon a positive determination, the querygenerator 704 eliminates the database query from the collected set ofqueries. In reference to FIG. 8, as one example, the query generator 704can eliminate a query for the genre of the story written by Jane Doe onMay 9, 2011. As another example, the query generator 704 can replace aquery for the text and editor of the story written by John Doe on May 8,2000 by a query for only the editor of the story.

In some embodiments, the query generator 704 sends the reorganized setof queries to the server for execution, and receives a set of queryresults. The query generator 704 updates the query history table asappropriate and stores the set of query results in the data store. Inthis manner, the query generator 704 makes all the data necessary forrendering the requested page available in the data store, regardless ofwhether the query result is previously available in the data store ornewly received from the server, before any rendering takes place.

In some embodiments, the user interface 702 ultimately receives the datanecessary for rendering the page requested by the user. The userinterface 702 then renders the requested page using the data in the datastore for viewing by the user. Similar to the query generator 704, theuser interface 702 starts by rendering the result of executing thetop-level database query and traverses the corresponding hierarchy in abreadth-first or depth-first manner. To render the result of executingeach database query in the hierarchy, the user interface 720 retrievesonly the data requested by the database query from the data storewithout following any composition relationship.

In some embodiments, after the requested page is displayed, the user caninteract with the page. For example, when the requested page is awebpage showing a first user's profile, a second user can indicatewhether to Like the first user's profile on the same page. For any userinput, the user interface 702 first shows an optimistic payload, namelywhat the user would expect to see, including the input itself and anyrendering changes triggered by the input. To highlight the optimisticand possibly temporary nature, the user interface 702 can present theoptimistic payload in a way that distinguishes it from the rest of thepage, such as having a different background color.

In some embodiments, the query generator 702 then identifies a groupquery that covers the item affected by the user input. For example, theitem can be the first user's profile, and the user input can be thesecond user indicating a Like of the first user's profile. As discussedabove, the group query requests a group of related items where theviewing or update of one of the items can trigger the viewing or updateof the others. By submitting the group query to the server, the querygenerator 702 acquires access to all the data that is likely to be usedby the user as a result of the user input and can save some futurecommunications with the server. Some of the group query result mayalready be available in the data store. For example, the data necessaryfor rendering the present page with which the user is interacting isgenerally already available in the data store. Therefore, the querygenerator can submit a reduced version of the group query to the serverdepending on what is in the data store. Subsequently, the querygenerator 704 receives the group query result, updates the query historytable as appropriate, and stores the group query result in the datastore.

In some embodiments, the mutation handler 706 determines what datachanges need to be made in response to the user input. As discussedabove, information regarding causal relationships can be available fromthe components. For example, in response to the second user Liking thefirst user's profile, a list of users who like the first user's profileand a count of the total number of Likes for the first user's profilewould need to be updated. None, one, or both of the list and the countmay be included in the present page or another page. The mutationhandler 706 then retrieves the relevant data from the data store andapplies the determined changes to the retrieved data. Instead ofimmediately saving the changed back into the data store, the mutationhandler 706 first ensures that these data changes can be committed bythe server into the master repository.

FIG. 9 illustrates an example data structure storing data changesresulting from user input before that are committed into databases. Insome embodiments, the mutation handler 706 saves an entry for each ofthe determined data changes into an action queue to achievesynchronization on the server. The entry can include a transaction ID902 that identifies a set of data changes resulting from the same userinput, item information 904 identifying a target item to be changed, thecurrent value 906 of the target item, and the new value 908 of thetarget item. For example, entries 910-914 are associated with the sametransaction. In the entry 910, the target item is the Like indicatorassociated with the second user for the first user's profile, thecurrent value is off, and the new value is on. In the entry 912, thetarget item is the list of users who have Liked the first user'sprofile, the current value is the list of the third user and the fourthuser, and the new value is the current value with the addition of thesecond user. In entry 914, the target item is the number of users whohave Liked the first user's profile, the current value is two, and thenew value is three. After the second user provides an initial input tothe requested page and sees the updated page, the second user mayprovide further inputs, possibly before the initial input is fullyprocessed. For example, the second user may keep changing his or hermind and unchecks but then checks again the Like indicator. The entries916 and 918 reflect those subsequent user inputs. (Additional entriesassociated with those two transactions are not shown.)

In some embodiments, the mutation handler 706 de-queues a set of allentries having the same transaction ID from the action queue and submitsthe data changes contained in these entries to the server at once forstorage in the master repository. Generally, the mutation handler 706waits until a response is returned from the server indicating whetherthe data changes are successfully committed into the master repositorybefore taking further action to ensure that the data changes arecommitted in order. If the server response indicates a failure, themutation handler 706 can resubmit the set of entries for a certainnumber of times. If the server response continues indicating a failure,the mutation handler 706 instructs the user interface 702 to revert tothe previous display using appropriate data in the submitted entries andoptionally show an error message. Furthermore, the mutation handler 706removes from the action queue every entry having the same target item asthe target item of any of the submitted entries, as these entries wereen-queued assuming an optimistic payload. The mutation handler 706 canalso en-queue all the removed entries again for resubmission to theserver later.

In some embodiments, if the server response indicates a success, themutation handler 706 de-queues another set of entries and repeats theprocess. The mutation handler 706 also saves the successful data changesin the data store. The mutation handler 706 can keep a separate, lesstransient record of submitting the data changes to track the datachanges stored in the data store. The mutation handler can achieve thispurpose by updating the query history table, in which case the table caninclude a type column, for example, indicating whether the data aredatabase query results or data changes, or working with a separate userinteraction history table. The submitted data changes can then beaccessed just as other query results. The mutation handler 706 can addentries to and remove entries from the query history table for each datachange in the same way as it does for each database query.

FIG. 10 illustrates a process performed by the client controller ofprocessing a user request for displaying a page. In some embodiments, instep 1002, the client controller receives a request from a user fordisplaying a page. In step 1004, the client controller identifies atop-level data query corresponding to the user request. As differenttypes of data are represented as different objects that are connectedthrough composition relationships, data queries are typically developedin a hierarchical manner following the structure of the data. In step1006, the client controller then builds the hierarchy of data queriesthat can be expanded from the top-level data query. The clientcontroller can now reorganize the set of data queries by removingduplicates or those whose results are already available in a localdatabase. The client controller can further enhance the set of dataqueries through various optimization techniques known to someone ofordinary skill in the art.

In some embodiments, in step 1008, the client controller submits thecleaned-up set of data queries to the server. By submitting the entirehierarchy or a sufficient subset, the client controller receives all thenecessary data at once from the server and reduces the number of networktrips. In step 1010, the client controller receives from the server acorresponding set of results from executing the set of data queries. Theclient controller then saves the set of results into the local database.In step 1012, the client controller renders the page using the hierarchyof data corresponding to the original hierarchy of data queries. Theclient controller can similarly perform the rendering in stages byfollowing the structure of the data. For example, when a part of thepage is not visible to the user because the enclosing item is in acollapsed state or because the part is outside the display window, theclient controller does not need to render that part of the page.

FIG. 11 illustrates a process performed by the client controller ofhandling a user request for updating a page. In some embodiments, instep 1102, the client controller receives a request from a user forupdating a page that is currently displayed to the user. For example, awebpage can have fields that accept user input. The request cancorrespond to data inputted by the user to one of the fields. In step1104, the client controller identifies all the data that will be changeddue to the request. For example, when the user leaves a comment on apage, not only is the comment considered as new data, the list of namesand the number of people who have left a comment on the page also needto be updated. See FIG. 12 for further detail. In step 1106, the clientcontroller updates the page with the changed data and displays theupdated page to the user, before the data changes are processed by theserver. This provision of an optimistic payload enables the user to seethe updates without delay. To eliminate the need to perform a rollbackin the local database, the client controller can save the data changesin a local queue before updating the display and only commit the datachanges to the local database when they have been successfully processedby the server. To enable a reversion of the display, the data changescan be saved together with the current data.

In some embodiments, in step 1108, the client controller submits thedata changes to the server to commit the data changes to a globaldatabase accessible to other client controllers. The client controllercan submit the data changes in the local queue in order by de-queuingitems from the local queue for each server submission. In step 1110, theclient controller receives a response from the server indicating whetherthe attempt to commit the data changes to the global database wassuccessful. Various reasons could have caused a failure. For example,the data changes might conflict with certain data changes that haverecently been made in the global database, or a network error mightprevent the data changes from ever reaching the server. Depending on theactual reason, the client controller can determine whether to retryimmediately or at a later time. When none of the attempts ends in asuccess, the client controller removes the updates from the display andsends an error message to the user. See FIG. 13 for further detail.

FIG. 12 illustrates a process performed by the client controller ofmanaging data in response to user input. In step 1202, the clientcontroller identifies a group query from a list of specific groupqueries for all the data likely to be viewed or updated by a user as aresult of a request from the user to update a page. For example, whenthe user leaves a comment on a page, the user might want to Like thepage or view the profile of the author of the page. By retrieving mostor all the data of interest at once through the group query, the clientcontroller reduces the number of network trips. The client controllercan submit a reduced version of the group query depending on what isalready available in the local database. In step 1204, the clientcontroller submits the identified group query or a reduced versionthereof to the server for execution. In step 1206, the client controllerreceives a result of executing the submitted query from the server. Instep 1208, the client controller saves the query result in the localdatabase for current and future use. For example, if the query resultincludes the profile of the author of the page, when the user requeststo view that profile later, the client controller can retrieve theprofile from the local database without having to request it from theserver at the time. In step 1210, the client controller then identifiesall the items that will be changed due to the user request, which wouldtypically constitute a subset of the group query result. In step 1212,the client controller retrieves those items from the local database andapplies the changes. In step 1214, the client controller adds thechanged data to the local queue for submission to the server.

FIG. 13 illustrates a process performed by the client controller ofhandling results of processing data changes by the server. In someembodiments, in step 1302, the client controller receives a responsefrom the server regarding committing certain data changes to the globaldatabase. In step 1304, the client controller determines whether theresponse indicates a success or a failure. When the response indicates asuccess, in step 1306, the client controller commits the data changes tothe local database. As the display already shows updated page contents,the client controller does not need to do anything further. When theresponse indicates a failure, the client controller can resubmit thedata changes to the server immediately or later by reinserting them intothe local queue. After a certain number of failures or a certain amountof time or according to some other criterion, the client controllerstops trying and handle the consequences.

In some embodiments, in step 1308, the client controller reverts thepage display to the previous state by removing the updates from ortriggered by the user input. The client controller can do so using thepast values (present values at the time) stored into and de-queued fromthe local queue together with the data changes. In step 1310, the clientcontroller further cleans up the local queue, which may contain itemsthat depend on the data changes being processed by the server. Forexample, after leaving a one-line comment, the user can decide to add asecond line. However, if the first line cannot be processed by theserver, the data change corresponding to the second line should not besubmitted. Therefore, the client controller deletes from the local queuethose items that depend on the data changes being processed by theserver.

Those skilled in the art will appreciate that the logic illustrated inFIG. 2 and described above, and in each of the flow diagrams discussedbelow, may be altered in various ways. For example, the order of thelogic may be rearranged, substeps may be performed in parallel,illustrated logic may be omitted, other logic may be included, etc.

FIG. 14 is a block diagram illustrating example modules of a computersystem that may be used to implement various features of theembodiments. The computing system 1400 may include one or more centralprocessing units (“processors”) 1405, memory 1410, input/output devices1425 (e.g., keyboard and pointing devices, display devices), storagedevices 1420 (e.g., disk drives), and network adapters 1430 (e.g.,network interfaces) that are connected to an interconnect 1415. Theinterconnect 1415 is illustrated as an abstraction that represents anyone or more separate physical buses, point to point connections, or bothconnected by appropriate bridges, adapters, or controllers. Theinterconnect 1415, therefore, may include, for example, a system bus, aPeripheral Component Interconnect (PCI) bus or PCI-Express bus, aHyperTransport or industry standard architecture (ISA) bus, a smallcomputer system interface (SCSI) bus, a universal serial bus (USB), IIC(I2C) bus, or an Institute of Electrical and Electronics Engineers(IEEE) standard 1494 bus, also called “Firewire”.

The memory 1410 and storage devices 1420 are computer-readable storagemedia that may store instructions that implement at least portions ofthe various embodiments. In addition, the data structures and messagestructures may be stored or transmitted via a data transmission medium,such as a signal on a communications link. Various communications linksmay be used, such as the Internet, a local area network, a wide areanetwork, or a point-to-point dial-up connection. Thus, computer readablemedia can include computer-readable storage media (e.g., “nontransitory” media) and computer-readable transmission media.

The instructions stored in memory 1410 can be implemented as softwareand/or firmware to program the processor(s) 1405 to carry out actionsdescribed above. In some embodiments, such software or firmware may beinitially provided to the processing system 1400 by downloading it froma remote system through the computing system 1400 (e.g., via networkadapter 1430).

The various embodiments introduced herein can be implemented by, forexample, programmable circuitry (e.g., one or more microprocessors)programmed with software and/or firmware, or entirely in special-purposehardwired (non-programmable) circuitry, or in a combination of suchforms. Special-purpose hardwired circuitry may be in the form of, forexample, one or more ASICs, PLDs, FPGAs, etc.

In various embodiments, the disclosed embodiments implement a method ofdetecting anomalies in time series data, comprising: modeling a timeseries using a linear regression framework; representing the time seriesas a sum of a signal portion and a noise, wherein the signal portioncorresponds to time-dependent data, and the noise removes timedependence from the data; calculating, for a specified time, a varianceof a difference between a value of the time series predicted by thelinear regression framework and a value of the signal portion;determining a threshold based on the calculated variance; and raising analarm when a difference between a value of the time series predicted bythe linear regression framework and an observed value of the time seriesfor the specified time is larger than the threshold. The modeling caninclude fitting the linear regression framework using a least squaresapproach with a non-negative form of regularization. The method caninclude calculating includes deriving the variance as a sum of a firstvariance of a difference between a value of the signal portion and avalue of the signal portion estimated by the linear regression frameworkfor the time point, and a second variance. The first variance can beestimated from values of the time series determined to contain noanomalies. The linear regression framework can be defined by a pluralityof weights respectively associated with a plurality of past timeperiods, and the second variance can be estimated as a sum of, over aplurality of time periods, a product of, a square of the weight and adifference of, a square of, a difference between a value of the timeseries estimated by the linear regression framework and a value of thetime series, and the first variance, for each of the time periods. Thedetermined threshold can be five times the square root of the calculatedvariance.

In various embodiments, the embodiments can include a computer-readablestorage medium storing computer-executable instructions that, whenexecuted, cause a computer to perform a method of detecting anomalies intime series data, comprising: instructions for modeling a time seriesusing a linear regression framework; instructions for representing thetime series as a sum of a signal portion and a noise, wherein the signalportion corresponds to time-dependent data, and the noise removes timedependence from the data; instructions for calculating, for a specifiedtime, a variance of a difference between a value of the time seriespredicted by the linear regression framework and a value of the signalportion; instructions for determining a threshold based on thecalculated variance; and instructions for raising an alarm when adifference between a value of the time series predicted by the linearregression framework and an observed value of the specified time islarger than the threshold.

In various embodiments, the embodiments implement a system for detectinganomalies in time series data, comprising: a modeling componentconfigured to model a time series using a linear regression framework; arepresenting component configured to represent the time series as a sumof a signal portion and a noise, wherein the signal portion correspondsto time-dependent data, and the noise takes the data out of timedependence; a calculating component configured to calculate a varianceof a difference between a value of the time series estimated by thelinear regression framework and a value of the signal portion for a timepoint; a determining component configured to determine a threshold basedon the calculated variance; and an alarm component configured to raisean alarm when a difference between a value of the time series estimatedby the linear regression framework and an observed value of the timeseries for a time point is greater than the threshold.

Remarks

The above description and drawings are illustrative and are not to beconstrued as limiting. Numerous specific details are described toprovide a thorough understanding of the disclosure. However, in certaininstances, well-known details are not described in order to avoidobscuring the description. Further, various modifications may be madewithout deviating from the scope of the embodiments. Accordingly, theembodiments are not limited except as by the appended claims.

Reference in this specification to “one embodiment” or “an embodiment”means that a particular feature, structure, or characteristic describedin connection with the embodiment is included in at least one embodimentof the disclosure. The appearances of the phrase “in one embodiment” invarious places in the specification are not necessarily all referring tothe same embodiment nor are separate or alternative embodiments mutuallyexclusive of other embodiments. Moreover, various features are describedwhich may be exhibited by some embodiments and not by others. Similarly,various requirements are described which may be requirements for someembodiments but not for other embodiments.

The terms used in this specification generally have their ordinarymeanings in the art, within the context of the disclosure, and in thespecific context where each term is used. Certain terms that are used todescribe the disclosure are discussed below, or elsewhere in thespecification, to provide additional guidance to the practitionerregarding the description of the disclosure. For convenience, certainterms may be highlighted, for example, by using italics and/or quotationmarks. The use of highlighting has no influence on the scope and meaningof a term; the scope and meaning of a term is the same, in the samecontext, whether or not it is highlighted. It will be appreciated thatthe same thing can be said in more than one way. One will recognize that“memory” is one form of a “storage,” and that the terms may on occasionbe used interchangeably.

Consequently, alternative language and synonyms may be used for any oneor more of the terms discussed herein nor is any special significance tobe placed upon whether or not a term is elaborated or discussed herein.Synonyms for certain terms are provided. A recital of one or moresynonyms does not exclude the use of other synonyms. The use of examplesanywhere in this specification, including examples of any term discussedherein, is illustrative only and is not intended to further limit thescope and meaning of the disclosure or of any exemplified term.Likewise, the disclosure is not limited to various embodiments given inthis specification.

Without intent to further limit the scope of the disclosure, examples ofinstruments, apparatus, methods and their related results according tothe embodiments of the present disclosure are given below. Note thattitles or subtitles may be used in the examples for convenience of areader, which in no way should limit the scope of the disclosure. Unlessotherwise defined, all technical and scientific terms used herein havethe same meaning as commonly understood by one of ordinary skill in theart to which this disclosure pertains. In the case of conflict, thepresent document, including definitions will control.

What is claimed is:
 1. A method performed by a client system ofretrieving data managed by a server for graphical rendering, comprising:receiving, by a client system, a request for a webpage includinggraphical content; collecting a hierarchy of database queries forfetching data used for rendering the webpage by: converting a uniformresource locator for the webpage into a top-level database query; andexpanding the top-level database query based on compositionrelationships to collect the hierarchy of database queries for fetchingthe data used for rendering the requested webpage; submitting via a datacommunications network the hierarchy of database queries in a batch tothe server; receiving, from the server, a set of query resultscorresponding to the hierarchy of database queries; transforming the setof query results to the graphical content; and displaying the graphicalcontent using the set of query results; receiving, by the client system,user input interacting with the graphical content; displaying, inresponse to receiving the user input, an optimistic payload of what auser would expect to see in response to the request for the webpage toenable the user to see data changes prior to the data changes beingprocessed by the server; wherein: a mutation handler determines whichdata changes will be made in response to the user input based oninformation regarding causal relationships; and the mutation handlerdetermines, in response to a second user liking a first user's profile,that a list of users who like the first user's profile or that a countof a total number of likes for the first user's profile will be updated.2. The method of claim 1, wherein a query generator constructs a diffquery to reduce an amount of the data requested by the request to onlydata that is missing in a local data store.
 3. The method of claim 1,wherein a graphical user interface, in order to highlight an optimisticnature of the optimistic payload, presents the optimistic payload in away that distinguishes the optimistic payload from a remainder of thewebpage.
 4. The method of claim 3, wherein the graphical user interfacedisplays the optimistic payload with a different background color thanthe remainder of the webpage.
 5. The method of claim 1, wherein thehierarchy of database queries has the top-level database query as aroot.
 6. The method of claim 5, the method further comprising traversingthe hierarchy.
 7. The method of claim 6, the method further comprisingrendering a result of each database query along the hierarchy.
 8. Themethod of claim 1, wherein the mutation handler, instead of immediatelysaving the data changes back into a local data store, first ensures thatthe data changes can be committed by the server into a masterrepository.
 9. The method of claim 1, wherein the mutation handlerde-queues a set of entries having a same transaction ID from an actionqueue and submits the data changes contained in the set of entries tothe server at once for storage in a master repository.
 10. The method ofclaim 9, wherein the mutation handler, in response to the servercontinuing to indicate a failure, instructs a graphical user interfaceto revert to a previous display using data in the set of entries. 11.The method of claim 10, wherein the mutation handler en-queues the setof entries again for resubmission to the server later.
 12. The method ofclaim 1, wherein the hierarchy of database queries specifies thetop-level database query for a viewer associated with a specific newsfeed, a database query for a list of stories, and a database query foreach story within the list of stories.
 13. A system for retrieving datamanaged by a server for graphical rendering, comprising: a graphicaluser interface, including an input device and an output device; and aprocessor and memory, configured to cooperate to function as: a firstreceiving unit configured to retrieve a request for a webpage includinga set of graphical items via the input device; a collecting unitconfigured to collect a hierarchy of database queries for fetching dataused for rendering the webpage by: converting a uniform resource locatorfor the webpage into a top-level database query; and expanding thetop-level database query based on composition relationships to collectthe hierarchy of database queries for fetching the data used forrendering the requested webpage; a submitting unit configured to submitthe hierarchy of database queries in a batch to the server; a secondreceiving unit configured to receive a group of query resultscorresponding to the hierarchy of database queries from the server;wherein: the graphical user interface is configured to display thegraphical items using the group of query results; the second receivingunit is further configured to receive user input interacting with thegraphical content; the graphical user interface is configured todisplay, in response to receiving the user input, an optimistic payloadof what a user would expect to see in response to the request for thewebpage to enable the user to see data changes prior to the data changesbeing processed by the server; and a mutation handler is configured todetermine which data changes will be made in response to the user inputbased on information regarding causal relationships; the mutationhandler determines, in response to a second user liking a first user'sprofile, that a list of users who like the first user's profile or thata count of a total number of likes for the first user's profile will beupdated.
 14. The system of claim 13, wherein the hierarchy of databasequeries forms a hierarchy based on the composition relationships, withthe top-level database query as a root.
 15. The system of claim 13,wherein the processor and memory are further configured to cooperate tofunction as: an adding unit that adds an entry to a query history tablefor each database query of the hierarchy of database queries after thehierarchy of database queries is submitted to the server; wherein theentry includes a submission time and information describing a respectivequery.
 16. The system of claim 15, wherein the processor and memory arefurther configured to cooperate to function as a deleting unit thatdeletes the entry from the query history table for each of the databasequeries of the hierarchy of database queries when a query resultcorresponding to the respective database query indicates a failure orwhen the entry reaches a specific retention threshold.
 17. The system ofclaim 13, wherein the processor and memory are further configured tocooperate to function as a storing unit that stores the group of queryresults in a local data store.
 18. The system of claim 17, wherein thegraphical user interface is configured to retrieve the group of queryresults from the local data store and to render the group of queryresults.
 19. The system of claim 13, wherein the system comprises asmart mobile device.
 20. A computer-readable storage medium storingcomputer-executable instructions that, when executed, cause a computerto perform a method of retrieving data managed by a server for graphicalrendering, the method comprising: receiving a request for a webpageincluding graphical content; collecting a hierarchy of database queriesfor fetching data used for rendering the webpage by: converting auniform resource locator for the webpage into a top-level databasequery; and expanding the top-level database query based on compositionrelationships to collect the hierarchy of database queries for fetchingthe data used for rendering the requested webpage; submitting thehierarchy of database queries in a batch to the server; receiving a setof query results corresponding to the hierarchy of database queries fromthe server; and displaying the graphical content using the set of queryresults; receiving user input interacting with the graphical content;displaying, in response to receiving the user input, an optimisticpayload of what a user would expect to see in response to the requestfor the webpage to enable the user to see data changes prior to the datachanges being processed by the server; wherein: a mutation handlerdetermines which data changes will be made in response to user input;the mutation handler determines, in response to a second user liking afirst user's profile, that a list of users who like the first user'sprofile or that a count of a total number of likes for the first user'sprofile will be updated.